let cell_data={
	text_cell:{
		write:text_write
	},
	picture_cell:{
		write:picture_write
	}
}
const defult_cell_style = {
	numFmtId: 0,      // 数字格式ID
	fontId: 0,        // 字体ID
	fillId: 0,        // 填充ID
	borderId: 0,      // 边框ID
	xfId: 0,          // 基础样式ID
	applyAlignment: 0, // 是否应用对齐 (0/1)
	horizontal: "",  // left/center/right
	vertical: "center"     // top/center/bottom
};
function get_style_str(style_obj){
	let numFmtId = style_obj.numFmtId||0
	let fontId = style_obj.fontId||0
	let fillId = style_obj.fillId||0
	let borderId = style_obj.borderId||0
	let xfId = style_obj.xfId||0
	let applyAlignment = style_obj.applyAlignment||0
	let horizontal = style_obj.horizontal||""
	let vertical = style_obj.vertical||""
	let str =`<xf numFmtId="${numFmtId}" fontId="${fontId}" fillId="${fillId}" borderId="${borderId}" xfId="${xfId}"`
	if(applyAlignment){
		str = str+` applyAlignment="${applyAlignment}"`
	}
	str = str+`>`
	str = str+`<alignment`
	if(horizontal){
		str = str +` horizontal="${horizontal}"`
	}
	if(vertical){
		str = str + ` vertical="${vertical}"`
	}
	str = str+`/>`
	str = str+`</xf>`
	return str;
}
function get_styles(arr){
	let count = 1;
	if(arr){
		count = arr.length+1
	}
	let str = `<cellXfs count="${count}">`
	str = str+get_style_str(defult_cell_style)
	if(arr){
		for(let i = 0;i<arr.length;i++){
			let obj  = arr[i];
			str = str+get_style_str(obj)
		}
	}
	str = str +`</cellXfs>`
	return str;
}
async function merge_images(image_blobs_arr, space, quality, background_color) {
	if (!image_blobs_arr || image_blobs_arr.length === 0) {
		return null;
	}
	if (image_blobs_arr.length === 1) {
		return new Promise((resolve) => {
			resolve(image_blobs_arr[0]);
		});
	}
	// 加载所有图片
	const loaded_images_arr = await Promise.all(
		image_blobs_arr.map(blob => new Promise((resolve, reject) => {
			const img = new Image();
			const url = URL.createObjectURL(blob);
			img.onload = () => { URL.revokeObjectURL(url); resolve(img); };
			img.onerror = (err) => { URL.revokeObjectURL(url); reject(new Error('图片加载失败: ' + err)); };
			img.src = url;
		}))
	);

	const num_images = loaded_images_arr.length;
	const cols = Math.ceil(Math.sqrt(num_images));
	const rows = Math.ceil(num_images / cols);

	const col_widths_arr = new Array(cols).fill(0);
	const row_heights_arr = new Array(rows).fill(0);

	// 计算每列最大宽度、每行最大高度
	for (let i = 0; i < loaded_images_arr.length; i++) {
		const img = loaded_images_arr[i];
		const row = Math.floor(i / cols);
		const col = i % cols;
		if (img.width > col_widths_arr[col]) col_widths_arr[col] = img.width;
		if (img.height > row_heights_arr[row]) row_heights_arr[row] = img.height;
	}

	// 计算总宽度
	let total_width = 0;
	for (let i = 0; i < col_widths_arr.length; i++) {
		total_width += col_widths_arr[i];
	}
	if (cols > 1) {
		total_width += space * (cols - 1);
	}

	// 计算总高度
	let total_height = 0;
	for (let i = 0; i < row_heights_arr.length; i++) {
		total_height += row_heights_arr[i];
	}
	if (rows > 1) {
		total_height += space * (rows - 1);
	}

	// 创建画布
	let canvas = document.createElement('canvas');
	canvas.width = total_width;
	canvas.height = total_height;
	let ctx = canvas.getContext('2d');

	// 背景颜色
	if (background_color) {
		ctx.fillStyle = background_color;
		ctx.fillRect(0, 0, canvas.width, canvas.height);
	}

	// 绘制图片（替换 reduce + slice 为循环）
	for (let i = 0; i < loaded_images_arr.length; i++) {
		const img = loaded_images_arr[i];
		const row = Math.floor(i / cols);
		const col = i % cols;

		let x = 0;
		for (let k = 0; k < col; k++) {
			x += col_widths_arr[k];
		}
		x += col * space;

		let y = 0;
		for (let k = 0; k < row; k++) {
			y += row_heights_arr[k];
		}
		y += row * space;

		ctx.drawImage(img, x, y);
	}

	// 如果画布尺寸大于 4096×4096，按比例缩小
	if (total_width > 4096 || total_height > 4096) {
		let scale = Math.min(4096 / total_width, 4096 / total_height);
		let scaled_canvas = document.createElement('canvas');
		scaled_canvas.width = Math.floor(total_width * scale);
		scaled_canvas.height = Math.floor(total_height * scale);
		let scaled_ctx = scaled_canvas.getContext('2d');
		scaled_ctx.drawImage(canvas, 0, 0, scaled_canvas.width, scaled_canvas.height);

		canvas.remove();
		canvas = scaled_canvas;
		ctx = scaled_ctx;
	}

	// 输出 Blob
	return new Promise((resolve, reject) => {
		canvas.toBlob(
			(blob) => {
				canvas.remove();
				canvas = null; // 帮助垃圾回收
				if (blob) {
					resolve(blob);
				} else {
					reject(new Error('从Canvas创建Blob失败。'));
				}
			},
			'image/png',
			quality
		);
	});
}
function picture_write(obj,row,sharedstr_arr){
	let xml = ""
	let x_min = obj.pos[0][0]
	let y_min = obj.pos[0][1]
	let x_max = obj.pos[0][0]
	if(obj.pos[1]){
		x_max = obj.pos[1][0]
	}
	for(let i = x_min;i<=x_max;i++){
		style_xml = "";
		if(obj.style||obj.style === 0){
			style_xml = ` s="${obj.style}"`
		}
		if(obj.content===undefined||obj.content===null||obj.content===undefined||obj.content===""){
			let excel_pos = pos_to_excel(i,obj.pos[0][1])
			xml =xml+ `<c r="${excel_pos}"`+style_xml+`/>`
		}else{
			if(i === x_min&&y_min === row){
				let excel_pos = pos_to_excel(i,obj.pos[0][1])
				fnstr = `<f>_xlfn.DISPIMG(&quot;${obj.content}&quot;,1)</f><v>=DISPIMG(&quot;${obj.content}&quot;,1)</v>`
				xml =xml+ `<c r="${excel_pos}"` +style_xml+` t="str">${fnstr}</c>` 
			}else{
				let excel_pos = pos_to_excel(i,row)
				xml =xml+ `<c r="${excel_pos}"`+style_xml+`></c>`
			}
		}
	}
	return xml;
}
function text_write(obj,row,sharedstr_arr){
	let xml = "";
	let x_min = obj.pos[0][0]
	let y_min = obj.pos[0][1]
	let x_max = obj.pos[0][0]
	if(obj.pos[1]){
		x_max = obj.pos[1][0]
	}
	for(let i = x_min;i<=x_max;i++){
		style_xml = "";
		if(obj.style||obj.style === 0){
			style_xml = ` s="${obj.style}"`
		}
		if(obj.content===undefined||obj.content===null||obj.content===undefined||obj.content===""){
			let excel_pos = pos_to_excel(i,obj.pos[0][1])
			xml =xml+ `<c r="${excel_pos}"`+style_xml+`/>`
		}else{
			if(i === x_min&&y_min === row){
				if(Number.isNaN(Number(obj.content))){
					let excel_pos = pos_to_excel(i,obj.pos[0][1])
					let index = sharedstr_arr.indexOf(obj.content);
					xml =xml+ `<c r="${excel_pos}"`+style_xml+` t="s"><v>${index}</v></c>`
				}else{
					let excel_pos = pos_to_excel(i,obj.pos[0][1])
					xml =xml+ `<c r="${excel_pos}"`+style_xml+`><v>${obj.content}</v></c>`
				}
			}else{
				let excel_pos = pos_to_excel(i,row)
				xml =xml+ `<c r="${excel_pos}"`+style_xml+`></c>`
			}
		}
	}
	return xml;
}
function remove_formula(arr){
	const pattern = /<f>_xlfn\.DISPIMG\(&quot;.*&quot;,1\)<\/f><v>=DISPIMG\(&quot;.*&quot;,1\)<\/v>/;
	let filte_arr = arr.filter(item => !pattern.test(item));	
	return filte_arr
}
function get_sharestr(arr){
	let filte_set = new Set();
	let count = 0;
	for(let obj of arr){
		if(obj.type === 'text'){
			if(obj.content!==""&&Number.isNaN(Number(obj.content))){
				filte_set.add(obj.content)
				count++
			}
		}
	}
	let unique_content_arr = Array.from(filte_set)
	unique_content_arr = remove_formula(unique_content_arr)
	let unique_count = unique_content_arr.length
	
	let xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+'\r\n'
	xml = xml+`<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="${String(count)}" uniqueCount="${String(unique_count)}">`
	for(let content of unique_content_arr){
		xml=xml+'<si><t>'+content+'</t></si>'
	}
	xml = xml+'</sst>'
	return {xml:xml,arr:unique_content_arr};
}
function pos_to_excel(col,row) {
    if (row < 1 || col < 1 || !Number.isInteger(row) || !Number.isInteger(col)) {
        throw new Error('行号和列号必须是大于0的整数');
    }
    let excelCol = '';
    let remaining = col;
    while (remaining > 0) {
        const modulo = (remaining - 1) % 26;
        excelCol = String.fromCharCode(65 + modulo) + excelCol;
        remaining = Math.floor((remaining - 1) / 26);
    }
    return excelCol + row;
}
function excel_to_pos(excelCoord) {
    const match = excelCoord.match(/^([A-Za-z]+)(\d+)$/);
    if (!match) {
        throw new Error('无效的Excel坐标格式');
    }
    const colLetters = match[1].toUpperCase();
    const row = parseInt(match[2], 10);
    let col = 0;
    for (let i = 0; i < colLetters.length; i++) {
        const charCode = colLetters.charCodeAt(i) - 64; // A=1, B=2, ..., Z=26
        col = col * 26 + charCode;
    }
    return [col,row];
}
function setting_width(width_arr,defaultColWidth) {
    let xml = '<cols>';
    for (let i = 0; i < width_arr.length; i++) {
        let col_num = i + 1;
        let width = width_arr[i];
		if(!width){
			width = defaultColWidth
		}
        xml =xml+ '<col min="' + col_num + '" max="' + col_num + '" width="' + width + '" customWidth="1"/>';
    }
    xml = xml+ '</cols>';
    return xml;
}
function get_sheet(arr,width_arr,height_arr,sharedstr_arr,defaultColWidth = 9,defaultRowHeight = 13){
	let xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+'\r\n'
	xml = xml+'<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:etc="http://www.wps.cn/officeDocument/2017/etCustomData"><sheetPr/>'
	let x_max = 1;
	let y_max = 1;
	let start_cell_x_arr = [];
	let start_cell_y_arr = [];
	for(let i = 0;i<arr.length;i++){
		let obj = arr[i]
		for(let pos_arr of obj.pos){
			if(pos_arr[0]>x_max){
				x_max = pos_arr[0]
			}
			if(pos_arr[1]>y_max){
				y_max = pos_arr[1]
			}
		}
	}
	for(let pos_arr of arr[0].pos){
		start_cell_x_arr.push(pos_arr[0]);
		start_cell_y_arr.push(pos_arr[1]);
	}
	start_cell_x_arr.sort();
	start_cell_y_arr.sort();
	let start_cell_start_pos = [start_cell_x_arr[0],start_cell_y_arr[0]];
	let start_cell_end_pos = [start_cell_x_arr[start_cell_x_arr.length-1],start_cell_y_arr[start_cell_y_arr.length-1]];
	let start_area = pos_to_excel(start_cell_start_pos[0],start_cell_start_pos[1])+":"+ pos_to_excel(start_cell_end_pos[0],start_cell_end_pos[1]);

	let max_excel_pos = pos_to_excel(x_max,y_max);
	xml = xml+'<dimension ref="'+'A1'+':'+max_excel_pos+'"/><sheetViews><sheetView tabSelected="1" workbookViewId="0"><selection activeCell="A1" sqref="'+start_area+'"/></sheetView></sheetViews><sheetFormatPr defaultColWidth="'+defaultColWidth+'" defaultRowHeight="'+defaultRowHeight+'"/>'
	let with_code = setting_width(width_arr,defaultColWidth)
	xml = xml+with_code+'<sheetData>'
	for(let i = 1;i<=y_max;i++){
		let height = height_arr[i-1]
		let row_cell_arr = [];
		for(let obj of arr){
			if(obj.pos[0][1] === i){
				row_cell_arr.push(obj);
			}else {
				if(obj.pos[1]&&i>obj.pos[0][1]&&i<=obj.pos[1][1]){
					row_cell_arr.push(obj);
				}
			}
		}
		let row_x_arr = [];
		for(let j=0;j<row_cell_arr.length;j++){
			let row_cell = row_cell_arr[j];
			row_x_arr.push(row_cell.pos[0][0])
			if(row_cell.pos[1]){
				row_x_arr.push(row_cell.pos[1][0])
			}
		}
		row_x_arr.sort((a, b) => a - b);
		let row_x_min = row_x_arr[0]
		let row_x_max = row_x_arr[row_x_arr.length-1];
		let span_str = "";
		if(row_x_arr.length>0){
			span_str = ` spans="${row_x_min}:${row_x_max}"`
		
		}
		let str = "";
		if(height === null||height ===undefined){
			str = `<row r="${String(i)}"${span_str}>`
		}else{
			str = '<row r="'+String(i)+'" ht="'+String(height)+'" spans="1:'+String(row_x_max)+'"'+' customHeight="1"'+'>'
			str = `<row r="${String(i)}" ht="${String(height)}"${span_str} customHeight="1">`
		}
		let td = "";
		for(let cell of row_cell_arr){
			if(cell.type === 'text'){
				write_str = cell_data.text_cell.write(cell,i,sharedstr_arr)
			}else if(cell.type = 'picture'){
				write_str = cell_data.picture_cell.write(cell,i,sharedstr_arr)
			}
			td =td+write_str
		}
		xml = xml+str+td+'</row>'
	}
	xml = xml+'</sheetData>'
	let merge_cell_arr = [];
	for(let obj of arr){
		if(obj.pos.length>1){
			merge_cell_arr.push(obj)
		}
	}
	let merge_cell_count = merge_cell_arr.length;
	let merge_str = `<mergeCells count="${merge_cell_count}">`;
	for(let obj of merge_cell_arr){
		let min_pos_str = pos_to_excel(obj.pos[0][0],obj.pos[0][1]);
		let max_pos_str = pos_to_excel(obj.pos[1][0],obj.pos[1][1]);
		merge_str = merge_str+`<mergeCell ref="${min_pos_str}:${max_pos_str}"/>`
	}
	merge_str = merge_str+'</mergeCells>'
	xml = xml+merge_str;
	xml = xml+'<pageMargins left="0.75" right="0.75" top="1" bottom="1" header="0.5" footer="0.5"/>'
	xml = xml +	'<headerFooter/><drawing r:id="rId1"/></worksheet>'
	return xml;
}
function get_img_info(blob) {
  return new Promise((resolve, reject) => {
    let imageUrl = URL.createObjectURL(blob);
    let img = new Image();
    img.onload = function() {
      // 3. 获取图片尺寸并释放 Object URL
      const dimensions = {
        width: img.naturalWidth,
        height: img.naturalHeight
      };
      URL.revokeObjectURL(imageUrl); // 释放内存
      resolve(dimensions);
    };
    img.onerror = function() {
      URL.revokeObjectURL(imageUrl); // 即使出错也要释放内存
      reject(new Error("Failed to load image"));
    };
    
    img.src = imageUrl;
  });
}
function check_cross(rect, target) {
    const xMin = rect[0][0]
    const xMax = rect[1][0]
    const yMin = rect[0][1]
    const yMax = rect[1][1]
    // 处理坐标点的情况
	if(target.length ===1){
        const [x, y] = target[0];
		if(x >= xMin && x <= xMax && y >= yMin && y <= yMax){
		   return true;
		}else{
			return false;
		}
	}else{
        const tXMin = target[0][0];
        const tXMax = target[1][0];
        const tYMin = target[0][1];
        const tYMax = target[1][1];
        const xOverlap = xMin <= tXMax && xMax >= tXMin;
        const yOverlap = yMin <= tYMax && yMax >= tYMin;
        return xOverlap && yOverlap;
    }
}
async function get_img_cell(obj_arr,width_arr,height_arr,defaultColWidth,defaultRowHeight){
	let pic_arr = [];
	let pic_type_set = new Set();
	let pic_name_set = new Set();
	for(let obj of obj_arr){
		if(obj.type ==='picture'){
			let pic_info_obj = await get_img_info(obj.blob)
			obj.img_height = pic_info_obj.height
			obj.img_width = pic_info_obj.width
			let pic_name_count = pic_name_set.size
			pic_name_set.add(obj.content);
			let new_pic_name_count = pic_name_set.size
			if(new_pic_name_count>pic_name_count){
				pic_arr.push(obj)
			}
			let pic_mime_type = obj.blob.type
			let picture_type_arr = pic_mime_type.split('/')
			let flite_type = picture_type_arr[0]
			let picture_type = picture_type_arr[1]
			if(picture_type){
				picture_type = picture_type.toLowerCase()
			}else{
				picture_type = png;
			}
			if(picture_type =='jpg'||picture_type =='jpeg'){
				pic_type_set.add('<Default Extension="jpeg" ContentType="image/jpeg"/><Default Extension="JPG" ContentType="image/.jpg"/>')
			}else if(picture_type =='png'){
				pic_type_set.add('<Default Extension="png" ContentType="image/png"/>')
			}else if(flite_type ==='image'){
				pic_type_set.add('<Default Extension="'+picture_type+'" ContentType="'+pic_mime_type+'"/>')
			}
		}
	}
	let imagetype = Array.from(pic_type_set).join("");
	let cellimage = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<etc:cellImages xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:etc="http://www.wps.cn/officeDocument/2017/etCustomData">`
	let rel_cellimage = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">`	
	for(let i=0;i<pic_arr.length;i++){
		let obj = pic_arr[i]
		let index = i+2
		obj.pic_index = index
		obj.pic_id = 'rId'+String(index);
		let picture_type = obj.blob.type.split('/')[1]
		if(picture_type){
			picture_type = picture_type.toLowerCase()
		}else{
			picture_type = "png";
		}		
		let pic_file_name = 'image'+String(index-1)+'.'+picture_type
		obj.file_name = pic_file_name;
		rel_cellimage = rel_cellimage+`<Relationship Id="${obj.pic_id}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/${pic_file_name}"/>`
		let picture_width =  (obj.img_width/96)*914400;		
		let picture_height = (obj.img_height/96)*914400;
		cellimage = cellimage+`<etc:cellImage><xdr:pic><xdr:nvPicPr><xdr:cNvPr id="${obj.pic_index}" name="${obj.content}"/><xdr:cNvPicPr/></xdr:nvPicPr><xdr:blipFill><a:blip r:embed="${obj.pic_id}"/><a:stretch><a:fillRect/></a:stretch></xdr:blipFill><xdr:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="${picture_width}" cy="${picture_height}"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></xdr:spPr></xdr:pic></etc:cellImage>`
	}
	cellimage = cellimage+`</etc:cellImages>`
	rel_cellimage = rel_cellimage+`</Relationships>`
	return {cellimage:cellimage,rel_cellimage:rel_cellimage,imagetype:imagetype,pic_arr:pic_arr}
}
async function get_xlsx(obj_arr,width_arr,height_arr,style_arr,zip_name){
	let defaultColWidth = 9;
	let defaultRowHeight = 13;
	let cell_map = new Map();
	let merge_cell_arr = [];
	for(let obj of obj_arr){
		if(obj.pos.length >=2){
			let x_arr = [obj.pos[0][0],obj.pos[1][0]]
			let y_arr = [obj.pos[0][1],obj.pos[1][1]]
			x_arr.sort((a, b) => a - b);
			y_arr.sort((a, b) => a - b);
			obj.pos = [];
			let x_min = x_arr[0];
			let y_min = y_arr[0];
			let x_max = x_arr[x_arr.length-1];
			let y_max = y_arr[y_arr.length-1];
			if(x_min === x_max&&y_min === y_max){
				obj.pos[0] = [x_min,y_min]
			}else{
				obj.pos[0] = [x_min,y_min]
				obj.pos[1] = [x_max,y_max]
			}
			merge_cell_arr.push(obj);
		}else{
			cell_map.set(pos_to_excel(obj.pos[0][0],obj.pos[0][1]),obj);
		}
		if(obj.type === 'picture'&&!obj.blob){
			console.log('检测到有图片单元格无图片');
			return;
		}
	}
	let delete_key_arr =[];
	let filte_merge_cell_arr = [];
	for(const cell of merge_cell_arr) {
		for (const [key, value] of cell_map) {
			if (check_cross(cell.pos, value.pos)) {
				delete_key_arr.push(key)
			}
		}
	}
	for(let key of delete_key_arr){
		cell_map.delete(key);
	}
    const merge_cell_index_set = new Set();
    for (let i = merge_cell_arr.length - 1; i >= 0; i--) {
        let shouldKeep = true;
        for (const index of merge_cell_index_set) {
            if(check_cross(merge_cell_arr[i].pos, merge_cell_arr[index].pos)) {
                shouldKeep = false;
                break;
            }
        }
        if(shouldKeep) {
            merge_cell_index_set.add(i); // 标记为保留
        }
    }
    for (let i = 0; i < merge_cell_arr.length; i++) {
        if(merge_cell_index_set.has(i)) {
            filte_merge_cell_arr.push(merge_cell_arr[i]);
        }
    }
	let cell_arr = [];
	for(let [key ,value] of cell_map){
		cell_arr.push(value);
	}
	for(let merge_cell of merge_cell_arr){
		cell_arr.push(merge_cell);
	}
	
	cell_arr.sort((a, b) => {
		let yDiff = a.pos[0][1] - b.pos[0][1];
		if (yDiff!== 0) return yDiff;
		return a.pos[0][0] - b.pos[0][0];
	});
	let style_str = get_styles(style_arr)
	let writer = new zip.ZipWriter(new zip.BlobWriter("application/xlsx"));
	let styles = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="xr9" xmlns:xr9="http://schemas.microsoft.com/office/spreadsheetml/2016/revision9"><numFmts count="4"><numFmt numFmtId="41" formatCode="_ * #,##0_ ;_ * \-#,##0_ ;_ * &quot;-&quot;_ ;_ @_ "/><numFmt numFmtId="42" formatCode="_ &quot;￥&quot;* #,##0_ ;_ &quot;￥&quot;* \-#,##0_ ;_ &quot;￥&quot;* &quot;-&quot;_ ;_ @_ "/><numFmt numFmtId="43" formatCode="_ * #,##0.00_ ;_ * \-#,##0.00_ ;_ * &quot;-&quot;??_ ;_ @_ "/><numFmt numFmtId="44" formatCode="_ &quot;￥&quot;* #,##0.00_ ;_ &quot;￥&quot;* \-#,##0.00_ ;_ &quot;￥&quot;* &quot;-&quot;??_ ;_ @_ "/></numFmts><fonts count="20"><font><sz val="11"/><color theme="1"/><name val="宋体"/><charset val="134"/><scheme val="minor"/></font><font><u/><sz val="11"/><color rgb="FF0000FF"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><u/><sz val="11"/><color rgb="FF800080"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><sz val="11"/><color rgb="FFFF0000"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><b/><sz val="18"/><color theme="3"/><name val="宋体"/><charset val="134"/><scheme val="minor"/></font><font><i/><sz val="11"/><color rgb="FF7F7F7F"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><b/><sz val="15"/><color theme="3"/><name val="宋体"/><charset val="134"/><scheme val="minor"/></font><font><b/><sz val="13"/><color theme="3"/><name val="宋体"/><charset val="134"/><scheme val="minor"/></font><font><b/><sz val="11"/><color theme="3"/><name val="宋体"/><charset val="134"/><scheme val="minor"/></font><font><sz val="11"/><color rgb="FF3F3F76"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><b/><sz val="11"/><color rgb="FF3F3F3F"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><b/><sz val="11"/><color rgb="FFFA7D00"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><b/><sz val="11"/><color rgb="FFFFFFFF"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><sz val="11"/><color rgb="FFFA7D00"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><b/><sz val="11"/><color theme="1"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><sz val="11"/><color rgb="FF006100"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><sz val="11"/><color rgb="FF9C0006"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><sz val="11"/><color rgb="FF9C6500"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><sz val="11"/><color theme="0"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font><font><sz val="11"/><color theme="1"/><name val="宋体"/><charset val="0"/><scheme val="minor"/></font></fonts><fills count="33"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor rgb="FFFFFFCC"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFFFCC99"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFF2F2F2"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFA5A5A5"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFC6EFCE"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFFFC7CE"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFFFEB9C"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="4"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.799981688894314"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.599993896298105"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.399975585192419"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="5"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="5" tint="0.799981688894314"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="5" tint="0.599993896298105"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="5" tint="0.399975585192419"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="6"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="6" tint="0.799981688894314"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="6" tint="0.599993896298105"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="6" tint="0.399975585192419"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="7"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="7" tint="0.799981688894314"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="7" tint="0.599993896298105"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="7" tint="0.399975585192419"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="8"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="8" tint="0.799981688894314"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="8" tint="0.599993896298105"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="8" tint="0.399975585192419"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="9"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="9" tint="0.799981688894314"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="9" tint="0.599993896298105"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="9" tint="0.399975585192419"/><bgColor indexed="64"/></patternFill></fill></fills><borders count="9"><border><left/><right/><top/><bottom/><diagonal/></border><border><left style="thin"><color rgb="FFB2B2B2"/></left><right style="thin"><color rgb="FFB2B2B2"/></right><top style="thin"><color rgb="FFB2B2B2"/></top><bottom style="thin"><color rgb="FFB2B2B2"/></bottom><diagonal/></border><border><left/><right/><top/><bottom style="medium"><color theme="4"/></bottom><diagonal/></border><border><left/><right/><top/><bottom style="medium"><color theme="4" tint="0.499984740745262"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF7F7F7F"/></left><right style="thin"><color rgb="FF7F7F7F"/></right><top style="thin"><color rgb="FF7F7F7F"/></top><bottom style="thin"><color rgb="FF7F7F7F"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF3F3F3F"/></left><right style="thin"><color rgb="FF3F3F3F"/></right><top style="thin"><color rgb="FF3F3F3F"/></top><bottom style="thin"><color rgb="FF3F3F3F"/></bottom><diagonal/></border><border><left style="double"><color rgb="FF3F3F3F"/></left><right style="double"><color rgb="FF3F3F3F"/></right><top style="double"><color rgb="FF3F3F3F"/></top><bottom style="double"><color rgb="FF3F3F3F"/></bottom><diagonal/></border><border><left/><right/><top/><bottom style="double"><color rgb="FFFF8001"/></bottom><diagonal/></border><border><left/><right/><top style="thin"><color theme="4"/></top><bottom style="double"><color theme="4"/></bottom><diagonal/></border></borders><cellStyleXfs count="49"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"><alignment vertical="center"/></xf><xf numFmtId="43" fontId="0" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="44" fontId="0" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="9" fontId="0" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="41" fontId="0" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="42" fontId="0" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="0" fillId="2" borderId="1" applyNumberFormat="0" applyFont="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="3" fillId="0" borderId="0" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="4" fillId="0" borderId="0" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="0" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="6" fillId="0" borderId="2" applyNumberFormat="0" applyFill="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="7" fillId="0" borderId="2" applyNumberFormat="0" applyFill="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="8" fillId="0" borderId="3" applyNumberFormat="0" applyFill="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="8" fillId="0" borderId="0" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="9" fillId="3" borderId="4" applyNumberFormat="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="10" fillId="4" borderId="5" applyNumberFormat="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="11" fillId="4" borderId="4" applyNumberFormat="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="12" fillId="5" borderId="6" applyNumberFormat="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="13" fillId="0" borderId="7" applyNumberFormat="0" applyFill="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="14" fillId="0" borderId="8" applyNumberFormat="0" applyFill="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="15" fillId="6" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="16" fillId="7" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="17" fillId="8" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="9" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="10" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="11" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="12" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="13" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="14" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="15" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="16" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="17" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="18" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="19" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="20" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="21" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="22" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="23" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="24" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="25" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="26" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="27" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="28" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="29" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="30" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="19" fillId="31" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="18" fillId="32" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf></cellStyleXfs>`+style_str+`<cellStyles count="49"><cellStyle name="常规" xfId="0" builtinId="0"/><cellStyle name="千位分隔" xfId="1" builtinId="3"/><cellStyle name="货币" xfId="2" builtinId="4"/><cellStyle name="百分比" xfId="3" builtinId="5"/><cellStyle name="千位分隔[0]" xfId="4" builtinId="6"/><cellStyle name="货币[0]" xfId="5" builtinId="7"/><cellStyle name="超链接" xfId="6" builtinId="8"/><cellStyle name="已访问的超链接" xfId="7" builtinId="9"/><cellStyle name="注释" xfId="8" builtinId="10"/><cellStyle name="警告文本" xfId="9" builtinId="11"/><cellStyle name="标题" xfId="10" builtinId="15"/><cellStyle name="解释性文本" xfId="11" builtinId="53"/><cellStyle name="标题 1" xfId="12" builtinId="16"/><cellStyle name="标题 2" xfId="13" builtinId="17"/><cellStyle name="标题 3" xfId="14" builtinId="18"/><cellStyle name="标题 4" xfId="15" builtinId="19"/><cellStyle name="输入" xfId="16" builtinId="20"/><cellStyle name="输出" xfId="17" builtinId="21"/><cellStyle name="计算" xfId="18" builtinId="22"/><cellStyle name="检查单元格" xfId="19" builtinId="23"/><cellStyle name="链接单元格" xfId="20" builtinId="24"/><cellStyle name="汇总" xfId="21" builtinId="25"/><cellStyle name="好" xfId="22" builtinId="26"/><cellStyle name="差" xfId="23" builtinId="27"/><cellStyle name="适中" xfId="24" builtinId="28"/><cellStyle name="强调文字颜色 1" xfId="25" builtinId="29"/><cellStyle name="20% - 强调文字颜色 1" xfId="26" builtinId="30"/><cellStyle name="40% - 强调文字颜色 1" xfId="27" builtinId="31"/><cellStyle name="60% - 强调文字颜色 1" xfId="28" builtinId="32"/><cellStyle name="强调文字颜色 2" xfId="29" builtinId="33"/><cellStyle name="20% - 强调文字颜色 2" xfId="30" builtinId="34"/><cellStyle name="40% - 强调文字颜色 2" xfId="31" builtinId="35"/><cellStyle name="60% - 强调文字颜色 2" xfId="32" builtinId="36"/><cellStyle name="强调文字颜色 3" xfId="33" builtinId="37"/><cellStyle name="20% - 强调文字颜色 3" xfId="34" builtinId="38"/><cellStyle name="40% - 强调文字颜色 3" xfId="35" builtinId="39"/><cellStyle name="60% - 强调文字颜色 3" xfId="36" builtinId="40"/><cellStyle name="强调文字颜色 4" xfId="37" builtinId="41"/><cellStyle name="20% - 强调文字颜色 4" xfId="38" builtinId="42"/><cellStyle name="40% - 强调文字颜色 4" xfId="39" builtinId="43"/><cellStyle name="60% - 强调文字颜色 4" xfId="40" builtinId="44"/><cellStyle name="强调文字颜色 5" xfId="41" builtinId="45"/><cellStyle name="20% - 强调文字颜色 5" xfId="42" builtinId="46"/><cellStyle name="40% - 强调文字颜色 5" xfId="43" builtinId="47"/><cellStyle name="60% - 强调文字颜色 5" xfId="44" builtinId="48"/><cellStyle name="强调文字颜色 6" xfId="45" builtinId="49"/><cellStyle name="20% - 强调文字颜色 6" xfId="46" builtinId="50"/><cellStyle name="40% - 强调文字颜色 6" xfId="47" builtinId="51"/><cellStyle name="60% - 强调文字颜色 6" xfId="48" builtinId="52"/></cellStyles><dxfs count="17"><dxf><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.799981688894314"/><bgColor theme="4" tint="0.799981688894314"/></patternFill></fill></dxf><dxf><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.799981688894314"/><bgColor theme="4" tint="0.799981688894314"/></patternFill></fill></dxf><dxf><font><b val="1"/><color theme="1"/></font></dxf><dxf><font><b val="1"/><color theme="1"/></font></dxf><dxf><font><b val="1"/><color theme="1"/></font><border><top style="double"><color theme="4"/></top></border></dxf><dxf><font><b val="1"/><color theme="0"/></font><fill><patternFill patternType="solid"><fgColor theme="4"/><bgColor theme="4"/></patternFill></fill></dxf><dxf><font><color theme="1"/></font><border><left style="thin"><color theme="4"/></left><right style="thin"><color theme="4"/></right><top style="thin"><color theme="4"/></top><bottom style="thin"><color theme="4"/></bottom><horizontal style="thin"><color theme="4" tint="0.399975585192419"/></horizontal></border></dxf><dxf><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.799981688894314"/><bgColor theme="4" tint="0.799981688894314"/></patternFill></fill><border><bottom style="thin"><color theme="4" tint="0.399975585192419"/></bottom></border></dxf><dxf><font><b val="1"/></font><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.799981688894314"/><bgColor theme="4" tint="0.799981688894314"/></patternFill></fill><border><bottom style="thin"><color theme="4" tint="0.399975585192419"/></bottom></border></dxf><dxf><font><color theme="1"/></font></dxf><dxf><font><color theme="1"/></font><border><bottom style="thin"><color theme="4" tint="0.399975585192419"/></bottom></border></dxf><dxf><font><b val="1"/><color theme="1"/></font></dxf><dxf><font><b val="1"/><color theme="1"/></font><border><top style="thin"><color theme="4"/></top><bottom style="thin"><color theme="4"/></bottom></border></dxf><dxf><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.799981688894314"/><bgColor theme="4" tint="0.799981688894314"/></patternFill></fill></dxf><dxf><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.799981688894314"/><bgColor theme="4" tint="0.799981688894314"/></patternFill></fill></dxf><dxf><font><b val="1"/><color theme="1"/></font><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.799981688894314"/><bgColor theme="4" tint="0.799981688894314"/></patternFill></fill><border><top style="thin"><color theme="4" tint="0.399975585192419"/></top><bottom style="thin"><color theme="4" tint="0.399975585192419"/></bottom></border></dxf><dxf><font><b val="1"/><color theme="1"/></font><fill><patternFill patternType="solid"><fgColor theme="4" tint="0.799981688894314"/><bgColor theme="4" tint="0.799981688894314"/></patternFill></fill><border><bottom style="thin"><color theme="4" tint="0.399975585192419"/></bottom></border></dxf></dxfs><tableStyles count="2" defaultTableStyle="TableStylePreset3_Accent1" defaultPivotStyle="PivotStylePreset2_Accent1"><tableStyle name="TableStylePreset3_Accent1" pivot="0" count="7" xr9:uid="{59DB682C-5494-4EDE-A608-00C9E5F0F923}"><tableStyleElement type="wholeTable" dxfId="6"/><tableStyleElement type="headerRow" dxfId="5"/><tableStyleElement type="totalRow" dxfId="4"/><tableStyleElement type="firstColumn" dxfId="3"/><tableStyleElement type="lastColumn" dxfId="2"/><tableStyleElement type="firstRowStripe" dxfId="1"/><tableStyleElement type="firstColumnStripe" dxfId="0"/></tableStyle><tableStyle name="PivotStylePreset2_Accent1" table="0" count="10" xr9:uid="{267968C8-6FFD-4C36-ACC1-9EA1FD1885CA}"><tableStyleElement type="headerRow" dxfId="16"/><tableStyleElement type="totalRow" dxfId="15"/><tableStyleElement type="firstRowStripe" dxfId="14"/><tableStyleElement type="firstColumnStripe" dxfId="13"/><tableStyleElement type="firstSubtotalRow" dxfId="12"/><tableStyleElement type="secondSubtotalRow" dxfId="11"/><tableStyleElement type="firstRowSubheading" dxfId="10"/><tableStyleElement type="secondRowSubheading" dxfId="9"/><tableStyleElement type="pageFieldLabels" dxfId="8"/><tableStyleElement type="pageFieldValues" dxfId="7"/></tableStyle></tableStyles><extLst><ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/></ext></extLst></styleSheet>`
	const rels = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties" Target="docProps/custom.xml"/></Relationships>`
	const app = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Application>WPS 表格</Application><HeadingPairs><vt:vector size="2" baseType="variant"><vt:variant><vt:lpstr>工作表</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size="1" baseType="lpstr"><vt:lpstr>sheet1</vt:lpstr></vt:vector></TitlesOfParts></Properties>`
	const core = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:creator>37558</dc:creator><cp:lastModifiedBy>残剑斩龙</cp:lastModifiedBy><dcterms:created xsi:type="dcterms:W3CDTF">2023-01-06T02:28:00Z</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">2024-04-21T13:47:04Z</dcterms:modified></cp:coreProperties>`
	const custom = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><property fmtid="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}" pid="2" name="ICV"><vt:lpwstr>EB9F5542C3604F509198FCA10247F0AE_13</vt:lpwstr></property><property fmtid="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}" pid="3" name="KSOProductBuildVer"><vt:lpwstr>2052-12.1.0.16729</vt:lpwstr></property><property fmtid="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}" pid="4" name="KSOReadingLayout"><vt:bool>false</vt:bool></property></Properties>`
	const rel_workbookxml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId5" Type="http://www.wps.cn/officeDocument/2020/cellImage" Target="cellimages.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/></Relationships>`
	const theme1 = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="44546A"/></a:dk2><a:lt2><a:srgbClr val="E7E6E6"/></a:lt2><a:accent1><a:srgbClr val="5B9BD5"/></a:accent1><a:accent2><a:srgbClr val="ED7D31"/></a:accent2><a:accent3><a:srgbClr val="A5A5A5"/></a:accent3><a:accent4><a:srgbClr val="FFC000"/></a:accent4><a:accent5><a:srgbClr val="4472C4"/></a:accent5><a:accent6><a:srgbClr val="70AD47"/></a:accent6><a:hlink><a:srgbClr val="0563C1"/></a:hlink><a:folHlink><a:srgbClr val="954F72"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Calibri Light"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="ＭＳ Ｐゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="ＭＳ Ｐゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:lumMod val="110000"/><a:satMod val="105000"/><a:tint val="67000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:lumMod val="105000"/><a:satMod val="103000"/><a:tint val="73000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:lumMod val="105000"/><a:satMod val="109000"/><a:tint val="81000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:satMod val="103000"/><a:lumMod val="102000"/><a:tint val="94000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:satMod val="110000"/><a:lumMod val="100000"/><a:shade val="100000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:lumMod val="99000"/><a:satMod val="120000"/><a:shade val="78000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="6350" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln><a:ln w="12700" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln><a:ln w="19050" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="57150" dist="19050" dir="5400000" algn="ctr" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="63000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"><a:tint val="95000"/><a:satMod val="170000"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="93000"/><a:satMod val="150000"/><a:shade val="98000"/><a:lumMod val="102000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:tint val="98000"/><a:satMod val="130000"/><a:shade val="90000"/><a:lumMod val="103000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="63000"/><a:satMod val="120000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/></a:theme>`
	const workbookxml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><fileVersion appName="xl" lastEdited="3" lowestEdited="5" rupBuild="9302"/><workbookPr codeName="ThisWorkbook"/><bookViews><workbookView windowHeight="17775"/></bookViews><sheets><sheet name="sheet1" sheetId="1" r:id="rId1"/></sheets><calcPr calcId="191029"/><extLst><ext uri="{B58B0392-4F1F-4190-BB64-5DF3571DCE5F}" xmlns:xcalcf="http://schemas.microsoft.com/office/spreadsheetml/2018/calcfeatures"><xcalcf:calcFeatures><xcalcf:feature name="microsoft.com:RD"/><xcalcf:feature name="microsoft.com:Single"/><xcalcf:feature name="microsoft.com:FV"/><xcalcf:feature name="microsoft.com:CNMTM"/><xcalcf:feature name="microsoft.com:LET_WF"/><xcalcf:feature name="microsoft.com:LAMBDA_WF"/><xcalcf:feature name="microsoft.com:ARRAYTEXT_WF"/></xcalcf:calcFeatures></ext></extLst></workbook>`

	let sharedstr_obj = get_sharestr(cell_arr)
	let sharedstr = sharedstr_obj.xml
	let sharedstr_arr = sharedstr_obj.arr
	let sheet = get_sheet(cell_arr,width_arr,height_arr,sharedstr_arr,defaultColWidth,defaultRowHeight)
	let {cellimage,rel_cellimage,imagetype,pic_arr} = await get_img_cell(cell_arr,width_arr,height_arr,defaultColWidth,defaultRowHeight)
	for(let pic of pic_arr){
		await writer.add("xl/media/"+pic.file_name, new zip.BlobReader(pic.blob));
	}
	const Content_Types =`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`+"\r\n"+`<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">`+imagetype+`<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/><Override PartName="/docProps/custom.xml" ContentType="application/vnd.openxmlformats-officedocument.custom-properties+xml"/><Override PartName="/xl/cellimages.xml" ContentType="application/vnd.wps-officedocument.cellimage+xml"/><Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/><Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/></Types>`
	
	await Promise.all([
		writer.add("xl/sharedStrings.xml",new zip.TextReader(sharedstr)),
		writer.add("xl/worksheets/sheet1.xml",new zip.TextReader(sheet)),
		writer.add("xl/_rels/cellimages.xml.rels",new zip.TextReader(rel_cellimage)),
		writer.add("xl/styles.xml",new zip.TextReader(styles)),
		writer.add("[Content_Types].xml",new zip.TextReader(Content_Types)),
		writer.add("_rels/.rels",new zip.TextReader(rels)),
		writer.add("docProps/app.xml",new zip.TextReader(app)),
		writer.add("docProps/core.xml",new zip.TextReader(core)),
		writer.add("docProps/custom.xml",new zip.TextReader(custom)),
		writer.add("xl/_rels/workbook.xml.rels",new zip.TextReader(rel_workbookxml)),
		writer.add("xl/theme/theme1.xml",new zip.TextReader(theme1)),
		writer.add("xl/workbook.xml",new zip.TextReader(workbookxml)),
		writer.add("xl/cellimages.xml",new zip.TextReader(cellimage))
	])	
	let content = await writer.close()
	let url = URL.createObjectURL(content);
	let a = document.createElement('a');
	a.href = url;
	a.download = zip_name;
	a.click();  // 触发下载
	a.remove();  // 清理DOM
	URL.revokeObjectURL(url);  // 释放URL对象	
}
